package code301_400;

import java.util.*;

/**
 * 373. 查找和最小的 K 对数字
 */
public class Code373 {


}


class Pair{

    int u;
    int v;

    public Pair(int u, int v) {
        this.u = u;
        this.v = v;
    }

    public List<List<Integer>> kSmallestPairs(int[] nums1, int[] nums2, int k) {
        //扫描这两个数组，u来自第一个数组,v来自第二个数组
        //最大堆<Pair>
        Queue<Pair> queue = new PriorityQueue<>((o1, o2) -> (o2.u+o2.v)-(o1.u+o1.v));
        //2.遍历两个数组
        for (int i = 0; i < Math.min(nums1.length,k); i++) {
            for (int j = 0; j < Math.min(nums2.length,k); j++) {
                if(queue.size()<k){
                    queue.offer(new Pair(nums1[i],nums2[j]));
                }else {
                    int add = nums1[i]+nums2[j];
                    Pair pair = queue.peek();
                    if (add>(pair.u+ pair.v)){
                        continue;
                    }else {
                        queue.poll();
                        queue.offer(new Pair(nums1[i],nums2[j]));
                    }
                }
            }
        }

        List<List<Integer>> ret = new ArrayList<>();
        for (int i = 0; i < k&&(!queue.isEmpty()); i++) {
            Pair pair = queue.poll();
            List<Integer> temp = new ArrayList<>();
            temp.add(pair.u);
            temp.add(pair.v);
            ret.add(temp);
        }

        return ret;
    }

}
